package utils.uk.ac.manchester.cs.skos;

import org.semanticweb.owlapi.model.*;

import utils.org.semanticweb.skos.*;

import java.net.URI;
/*
 * Copyright (C) 2007, University of Manchester
 *
 * Modifications to the initial code base are copyright of their
 * respective authors, or their employers as appropriate.  Authorship
 * of the modifications may be determined from the ChangeLog placed at
 * the end of this file.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

/**
 * Author: Simon Jupp<br>
 * Date: Sep 8, 2008<br>
 * The University of Manchester<br>
 * Bio-Health Informatics Group<br>
 */
public class SKOSEntityAssertionImpl implements SKOSEntityAssertion, SKOSEntityVisitor {

    SKOSEntity entity;
    URI uri;
    SKOSDataFactoryImpl df;
    OWLClassAssertionAxiom ax;

    public SKOSEntityAssertionImpl (SKOSDataFactoryImpl skosDataFactory, SKOSEntity entity) {
        this.uri = entity.getURI();
        this.df = skosDataFactory;
        entity.accept(this);
    }


    public OWLClassAssertionAxiom getAssertionAxiom() {
        return ax;
    }

//    private void createAssertion(SKOSDataFactoryImpl skosDataFactory) {
//        OWLClass cls = skosDataFactory.getOWLClass(SKOSVocabulary.CONCPET.getURI());
//        SKOSConceptImpl con = (SKOSConceptImpl) concept;
//        OWLIndividual ind = con.getAsOWLIndividual();
//        ax = skosDataFactory.getOWLClassAssertionAxiom(ind, cls);
//    }

    public SKOSEntity getReferencedEntities() {
        return null;
    }

    public void accept(SKOSAssertionVisitor visitor) {
        visitor.visit(this);
    }

    public void accept(SKOSObjectVisitor visitor) {
        visitor.visit(this);
    }

    public void visit(SKOSConceptScheme entity) {
        OWLClass cls = df.getOWLClass(IRI.create(SKOSRDFVocabulary.CONCEPTSCHEME.getURI()));
        SKOSConceptSchemeImpl con = (SKOSConceptSchemeImpl) entity;
        OWLNamedIndividual ind = con.getAsOWLIndividual();
        ax = df.getOWLClassAssertionAxiom(cls, ind);
    }

    public void visit(SKOSConcept entity) {
        OWLClass cls = df.getOWLClass(IRI.create(SKOSRDFVocabulary.CONCEPT.getURI()));
        SKOSConceptImpl con = (SKOSConceptImpl) entity;
        OWLIndividual ind = con.getAsOWLIndividual();
        ax = df.getOWLClassAssertionAxiom(cls, ind);
    }

    public void visit(SKOSCollection entity) {
        OWLClass cls = df.getOWLClass(IRI.create(SKOSRDFVocabulary.COLLECTION.getURI()));
        SKOSCollectionImpl con = (SKOSCollectionImpl) entity;
        OWLIndividual ind = con.getAsOWLIndividual();
        ax = df.getOWLClassAssertionAxiom(cls, ind);
    }

    public void visit(SKOSOrderedCollection entity) {
        OWLClass cls = df.getOWLClass(IRI.create(SKOSRDFVocabulary.ORDEREDCOLLECTION.getURI()));
        SKOSOrderedCollectionImpl con = (SKOSOrderedCollectionImpl) entity;
        OWLIndividual ind = con.getAsOWLIndividual();
        ax = df.getOWLClassAssertionAxiom(cls, ind);
    }

    public void visit(SKOSResource entity) {
        OWLClass cls = df.getOWLThing();
        SKOSResourceImpl con = (SKOSResourceImpl) entity;
        OWLIndividual ind = con.getAsOWLIndividual();
        ax = df.getOWLClassAssertionAxiom(cls, ind);
    }

    public void visit(SKOSDataType dataType) {
//        ax = df.getOWLClassAssertionAxiom(df.getOWLClass(OWLXMLVocabulary.DATATYPE.getURI()), df.getOWLNamedIndividual(dataType.getURI()));
    }
}
